// pages/login/login.js
import { toast } from '../../utils/extendApi'
// 导入本地存储 API 函数
import { setStorage } from '../../utils/storage'
// 导入接口 API 函数
import { reqLogin,reqUserInfo } from '../../api/user'
// 导入 ComponentWithStore 方法
import { ComponentWithStore } from 'mobx-miniprogram-bindings'
// 导入 store 对象
import { userStore } from '../../stores/userstore'
// npm i miniprogram-licia --save 防抖功能，作用：防止同一时间进行多次请求；
// 功能：在某一段时间，只执行最后一次请求；参数（要调用的函数，限制的时间段）；
import { debounce } from 'miniprogram-licia'


// 使用 ComponentWithStore 方法替换 Componentn 方法构造页面
ComponentWithStore({

  // 页面的初始数据
  data: {

  },
  // 让页面和 Store 建立对象
  storeBindings : {
    store : userStore,
    fields : ['token', 'userInfo'],
    actions : ['setToken', 'setUserInfo'],
  },

  methods : {

      // 授权登录
      login: debounce(function () {
        // 使用 wx.login 获取用户的临时登录凭证 code
        wx.login({
          // timeout: 0,
          success: async ({code}) => {
            // code: "0c3b2N0w3b9a933hky0w3jJpVs1b2N0O"
            console.log('临时登录凭证-login.js',code)
            if (code) {
              // 在获取到临时登录凭证 code 以后，需要传递给开发者服务器
              const { data } = await reqLogin(code);
              // console.log('登录后返回的token',data)
              // 登录成功以后，需要将服务器响应的自定义登录态存储到本地
              setStorage('token',data.token);
              // 将自定义登录态token 存储到 Store 对象
              this.setToken(data.token);
              // 获取用户信息
              this.getUserInfo();
              // 登录成功后返回上一级页面
              wx.navigateBack()
            } else {
              toast({title: '授权失败，请重新授权'})
            }
          }
        })
      },500),
      // 获取用户信息
      async getUserInfo () {
        // 调用接口，获取用户信息
        const { data } =  await reqUserInfo()
        console.log('获取用户信息',data)
        // 将用户信息存储本地
        setStorage('userInfo',data)
        // 将用户信息存储到 Store 对象
        this.setUserInfo(data);
      }
  },


  // 生命周期函数--监听页面加载
  onLoad: function (options) {

  },
  
})